//
// Created by jinling on 2025/6/26.
//

/*函数负责从指定路径加载 JSON 配置文件
 *并将配置项解析到类成员变量中。如果解析成功返回 true，否则返回 false*/
#pragma once

#include "json/json.h"
// #include <json/json.h>
#include "NonCopyable.h"
#include "Singleton.h"
#include <string>
#include<cstdint>
#include<memory>
#include<mutex>

namespace tmms
{
	namespace base
	{
		struct LogInfo
		{
			std::string level;
			std::string path;
			std::string name;
		};
		using LogInfoPtr = std::shared_ptr<LogInfo>;

		class Config
		{
		public:
			Config() = default;
			~Config() = default;
			bool LoadConfig(const std::string &file);

			LogInfoPtr& GetLogInfo();

		private:
			bool PareLogInfo(const Json::Value &root); //log应该用 私用函数去解析
			LogInfoPtr log_info_;
			std::string name_;
			int32_t cpu_start_{0};
			int32_t thread_nums_{0};
		};
		using ConfigPtr = std::shared_ptr<Config>;

		class ConfigMgr:public NonCopyable //定义成单例的  可以全局的去调用
		{
		public:
			ConfigMgr()=default;
			~ConfigMgr()=default;

			bool LoadConfig(const std::string &file);
			ConfigPtr Getconfig();
		private:
			ConfigPtr config_;
			std::mutex mutex_;
		};
#define sConfigMgr tmms::base::Singleton<tmms::base::ConfigMgr>::Instance()//在这里定义单例类
	}
}
